﻿#include "lua_rpc_router.h"

#include "rpc_router.h"  // for CRpcRouter

#include <LuaIntf/LuaIntf.h>

namespace {

// Set global router. 设置全局的路由，所有玩家都相同。
void SetGblSvcDstSvrId(const std::string& sService, uint16_t uSvrId)
{
	CRpcRouter::get_mutable_instance().SetSvcDstSvrId(sService, uSvrId);
}

void SetGblMthdDstSvrId(const std::string& sService, const std::string& sMethod,
	uint16_t uSvrId)
{
	CRpcRouter::get_mutable_instance().SetMthdDstSvrId(
		sService, sMethod, uSvrId);
}

// 设置玩家的路由。不同玩家转发到不同Cell服。
void SetSvcDstSvrId(uint64_t uRpcCltId,
	const std::string& sService, uint16_t uSvrId)
{
	CRpcRouter::get_mutable_instance().SetSvcDstSvrId(
		uRpcCltId, sService, uSvrId);
}

void SetMthdDstSvrId(uint64_t uRpcCltId, const std::string& sService,
	const std::string& sMethod, uint16_t uSvrId)
{
	CRpcRouter::get_mutable_instance().SetMthdDstSvrId(
		uRpcCltId, sService, sMethod, uSvrId);
}

}  // namespace

namespace LuaRpcRouter {

void Bind(lua_State* L)
{
	assert(L);
	LuaIntf::LuaBinding(L).beginModule("c_rpc_router")
		.addFunction("set_gbl_svc_dst_svr_id", &SetGblSvcDstSvrId)
		.addFunction("set_gbl_mthd_dst_svr_id", &SetGblMthdDstSvrId)
		.addFunction("set_svc_dst_svr_id", &SetSvcDstSvrId)
		.addFunction("set_mthd_dst_svr_id", &SetMthdDstSvrId)
	.endModule();
}

}  // namespace LuaRpcRouter
